'''
    Deque也叫双端队列，与队列类似。但是他有首部和尾部，也就是它具有两个方向，可以从首部、尾部插入和删除数据。
    一般定义方法如下：
        - Deque() 创建一个空的新 deque。它不需要参数，并返回空的 deque。
        - addFront(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。
        - addRear(item) 将一个新项添加到 deque 的尾部。它需要 item 参数并不返回任何内容。
        - removeFront() 从 deque 中删除首项。它不需要参数并返回 item。deque 被修改。
        - removeRear() 从 deque 中删除尾项。它不需要参数并返回 item。deque 被修改。
        - isEmpty() 测试 deque 是否为空。它不需要参数，并返回布尔值。
        - size() 返回 deque 中的项数。它不需要参数，并返回一个整数。
'''

class Deque:
    def __init__(self):
        self.items = [] # 用列表存储

    def isEmpty(self):
        return self.items == []

    def addFront(self,item):
        self.items.append(item)

    def addRear(self,item):
        self.items.insert(0,item)

    def removeFront(self):
        return self.items.pop() # pop方法默认去除列表最后一个

    def removeRear(self):
        return self.items.pop(0)

    def size(self):
        return len(self.items)

def test():
    q = Deque()
    print(q.size())
    print(q.isEmpty())
    q.addFront(2)
    print(q.items)
    q.addRear(3)
    q.addFront(4)
    print(q.items)

    q.removeRear()
    q.removeFront()
    print(q.items)
    print(q.isEmpty())

if __name__ == '__main__':
    test()